package UHF18;

/**
 * @description: 写卡程序
 * @author: hubin
 * @email: nightt0428@gmail.com
 * @date: 2022/8/26 16:47
 */

public class WriteCard {
    /**
     * 导入核心类
     */
    private UHFReader uhf = new UHFReader();
    public Integer openTcpVar;

    /**
     * 连接TCP
     *0代表连接成功
     * @param
     * @param
     */
    public Integer doOpen(String ipaddr, Integer port) {
        openTcpVar = uhf.OpenByTcp(ipaddr, port);
        return openTcpVar;
    }

    /**
     * 关闭TCP
     * 返回0 代表成功，否则失败
     */
    public Integer doClose(Integer port) {
        Integer closeTcpVar = uhf.CloseByTcp(port);
        return closeTcpVar;
    }

    /**
     * 查询
     * 返回"" 表示未查询到数据
     */
    public String[] doQuery() {
        //连接
        String[] inventory = uhf.Inventory();
        return inventory;
    }

    /**
     * 写数据
     * 返回值0代表成功
     */
    public Integer doWrite(String oldEpc /*参数1*/, String orgAddr, String newEpc, String passWord) {
        //参数2
        byte WordPtr = (byte) (0xff & Integer.parseInt(orgAddr, 16));
        //参数3
        byte Num = (byte) (newEpc.length() / 4);
        //新数据,参数4
        byte[] data = uhf.stringToByte(newEpc);
        //密码
        byte[] psd = uhf.stringToByte(passWord);
        int i = uhf.WriteData(oldEpc, WordPtr, Num, data, (byte) 1, psd);
        return i;
    }

//    /**
//     * 主程序
//     *
//     * @param args
//     */
//    public static void main(String[] args) {
//        //init
//        WriteCard writeCard = new WriteCard();
//        //保存读取标签的数据
//        StringBuilder sb = new StringBuilder();
//        //1、连接程序
//        Integer integer = writeCard.doOpen("192.168.1.192", 6000);
//        if (integer == 0) {
//            System.out.println("连接成功!");
//        } else {
//            System.out.println("连接失败！");
//        }
//        //2、读取数据，输入的数据都在数组中
//        String[] strings = writeCard.doQuery();
//        if(null==strings){
//            System.out.println("未读到任何数据");
//        }
//        else if (strings.length != 1) {
//            System.out.println("写卡时，请保证只有一个标签在读写机附近!");
//        } else {
//
//            for (String string : strings) {
//                sb.append(string);
//                System.out.println("读到的数据是：" + sb);
//            }
//        //3、修改数据
//            //键盘输入表示确定要修改的标签数据
//            System.out.println("要修改的标签的id是否是：" + sb);
//            System.out.println("并且输入新的标签数据，且是8位数,若退出程序，输入exit");
//
//            /**
//             * 写卡步骤，将上面的数据放入在oldEpc上，newEpc获取键盘输入数据
//             *
//             */
//            //设置死循环标记
//            Integer flag = 1;
//            //写卡
//            while (flag == 1) {
//                Scanner sc = new Scanner(System.in);
//                String newEpc = sc.next();
//                if(newEpc.equals("exit")){
//                    return;
//                }
//                else if (newEpc.length() != 8) {
//                    System.out.println("必须是8位数！");
//                } else {
//                    Integer integer1 = writeCard.doWrite(sb.toString(), "2", newEpc, "00000000");
//                    //方法输出0表示修改成功
//                    System.out.println(integer1 + "=>输出0表示修改中");
//                    System.out.println("标签已经修改为：" + newEpc);
//                    flag = 2;
//                    //关闭资源
//                    writeCard.doClose();
//                }
//
//            }
//        }
//    }
}
